<?php
/**
 * @author Julien Couture, Guillaume Tostain, Théo Portois
 * @version 1.0.0
 * @date 04/11/2014
 * @brief Controlleur des parties
 * @details Controlleur de la classe partie comportant toute les fonctions associées aux parties
 */
class CPartie extends \BaseController {
	
	
	
	
	/**
	 * @see BaseController::index()
	 * @brief Redirige s'il on est deconnecter puis lance le refresh()
	 */
	public function index($params="") {
		$this->redirection();
		$this->refresh();
	}

	
	
	
	
	/**
	 * @brief Charge les vues vHeader et vParties
	 * @details Charge les vues vHeader et vParties en passant en paramêtre les id des parties liées au joueur
	 */
	public function refresh(){
		$this->loadView("vHeader");
		$this->loadView("vParties", array("pAMoiDeJouer"=>$this->loadPartiesAMoiDeJouer(),"pAAdversaireDeJouer"=>$this->loadPartiesPasMonTour(),"pARejoindre"=>$this->loadPartiesIncomplet()));
		echo JsUtils::getAndBindTo("#btNewPartie", "click", "/trivia/CPartie/newPartie","{}","#divMessage");
		echo JsUtils::getAndBindTo(".rejoindre", "click", "/trivia/CPartie/rejoindrePartie", "{}", "body");
		echo JsUtils::getAndBindTo(".jouer", "click", "/trivia/CPartie/jouerManche", "{}", "body");
		echo JsUtils::getAndBindTo("#deco", "click", "/trivia/CPartie/deconnexion", "{}", "body");
		
	}

	
	
	
	
	/**
	 * @return Partie  Les parties du joueur
	 * @brief Retourne les parties du joueur ou le joueur doit jouer
	 */
	public function loadPartiesAMoiDeJouer(){
		$idJoueur=$_SESSION['joueur1']->getId();
		return DAO::getAll("Partie","idJoueurEnCours=".$idJoueur);
	}

	
	
	
	
	
	/**
	 * @return Partie  Les parties du joueur
	 * @brief Retourne les parties du joueur ou le joueur doit attendre que le 2ème joueur joue
	 */
	public function loadPartiesPasMonTour(){
		$idJoueur=$_SESSION['joueur1']->getId();
		return DAO::getAll("Partie","(idJoueur1=".$idJoueur." or idJoueur2=".$idJoueur.") and idJoueurEnCours!=".$idJoueur);
	}

	
	
	
	
	
	
	/**
	 * @return Partie Les parties du joueur
	 * @brief Retourne les parties du joueur ou le joueur doit attendre qu'un 2ème joueur rejoigne la partie
	 */
	public function loadPartiesIncomplet(){
		$idJoueur=$_SESSION['joueur1']->getId();
		return DAO::getAll("Partie","idJoueur2 is NULL and idJoueur1!=".$idJoueur);
	}
	
	
	
	
	
	/**
	 * @brief Crée une partie
	 * @details Crée une partie avec le joueurs connecté en tant que joueur1 et l'insert dans la BDD
	 */
	public function newPartie(){
		$nouveau = new Partie();
		$nouveau->setJoueur1($_SESSION['joueur1']);
		if(DAO::insert($nouveau)==1){
			echo "Nouvelle partie créée";
		}
	}

	
	
	
	
	
	
	
	/**
	 * @param string $param La chaine de charactère contenant l'id de la partie
	 * @brief Fait rejoindre la partie
	 * @details Fait rejoindre la partie au joueur connecté en tant que joueur 2 (la partie existe deja)
	 */
	public function rejoindrePartie($param){
		$id=str_replace("partie", "", $param[0]);
		$partie=DAO::getOne("Partie", $id);
		$partie->setJoueur2($_SESSION['joueur1']);
		$partie->setJoueurEnCours($_SESSION['joueur1']);
		if(DAO::update($partie)==1){
			(new CQuestion())->index($partie);
		}
	}

	
	
	
	
	
	/**
	 * @param string $param La chaine de charactère contenant l'id de la partie
	 * @brief Renvoie vers CQuestion
	 * @details Renvoie vers CQuestion avec en parametre l'id de la partie
	 */
	public function jouerManche($param){
		$id=str_replace("jouer", "", $param[0]);
		echo JsUtils::post("/trivia/CQuestion/index/","{idpartie:".$id."}","body");
	}
	
	
	
	
	
	/**
	 * @brief Deconnecte le joueur
	 * @details Deconnecte le joueur en supprimant sa variable de session
	 */
	public function deconnexion(){
		$_SESSION['joueur1']=null;		
		unset($_SESSION['joueur1']);
		//session_destroy();
	}
	
	
	
	
	
	/**
	 * @brief Redirige vers CJoueur
	 * @details Redirige vers CJoueur (page de connexion) si le joueur n'est pas connecter
	 */
	public function redirection(){
		if($_SESSION['joueur1']==null){
			header('Location: /trivia/CJoueur');
		}
	}
	
}